package com.crb.oauth2.api.wechat.cp.bean;

import com.crb.oauth2.api.wechat.cp.utils.JsonUtils;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

import java.io.Serializable;

/**
 * Package: com.github.binarywang.demo.wx.cp.api.bean
 * Description：设置工作台自定义展示
 * Author: huangjian
 * Date:  2020/8/18 14:03
 * Modified By:
 * @author huangjian
 */
@Data
@ToString
@EqualsAndHashCode
public class WxCpSetWorkbenchTemplateRequest implements Serializable {
    /**
     *应用id
     */
    @SerializedName("agentid")
    private Integer agentId;

    /**
     *模版类型，目前支持的自定义类型包括 “keydata”、 “image”、 “list”、 “webview” 。若设置的type为 “normal”,则相当于从自定义模式切换为普通宫格或者列表展示模式
     */
    @SerializedName("type")
    private String type;

    /**
     *是否覆盖用户工作台的数据。设置为true的时候，会覆盖企业所有用户当前设置的数据。若设置为false,则不会覆盖用户当前设置的所有数据。默认为false
     */
    @SerializedName("replace_user_data")
    private Boolean replaceUserData;

    /**
     *若type指定为 “keydata”，且需要设置企业级别默认数据，则需要设置关键数据型模版数据,数据结构参考“关键数据型”
     */
    @SerializedName("keydata")
    private Keydata keydata;

    /**
     *若type指定为 “image”，且需要设置企业级别默认数据，则需要设置图片型模版数据,数据结构参考“图片型”
     */
    @SerializedName("image")
    private Image image;

    /**
     *若type指定为 “list”，且需要设置企业级别默认数据，则需要设置列表型模版数据,数据结构参考“列表型”
     */
    @SerializedName("list")
    private List list;

    /**
     *若type指定为 “webview”，且需要设置企业级别默认数据，则需要设置webview型模版数据,数据结构参考“webview型”
     */
    @SerializedName("webview")
    private Webview webview;

    public static WxCpSetWorkbenchTemplateRequest fromJson(String json) {
        return JsonUtils.fromGsonJson(json, WxCpSetWorkbenchTemplateRequest.class);
    }

    public String toJson() {
        return JsonUtils.toGsonJson(this);
    }

    @Data
    @ToString
    @EqualsAndHashCode
    public static class Keydata {
        /**
         * 关键数据列表个，不超过4个
         */
        @SerializedName("items")
        private java.util.List<Item> items;

        @Data
        @ToString
        @EqualsAndHashCode
        public static class Item {
            /**
             * 关键数据名称，需要设置在模版中
             */
            @SerializedName("key")
            private String key;
            /**
             * 关键数据
             */
            @SerializedName("data")
            private String data;
            /**
             * 点击跳转url，若不填且应用设置了主页url，则跳转到主页url，否则跳到应用会话窗口
             */
            @SerializedName("jump_url")
            private String jumpUrl;
            /**
             * 若应用为小程序类型，该字段填小程序pagepath，若未设置，跳到小程序主页
             */
            @SerializedName("pagepath")
            private String pagePath;
        }
    }

    @Data
    @ToString
    @EqualsAndHashCode
    public static class Image {
        /**
         * 图片url。图片的最佳比例为3.35:1
         */
        @SerializedName("url")
        private String url;
        /**
         * 点击跳转url，若不填且应用设置了主页url，则跳转到主页url，否则跳到应用会话窗口
         */
        @SerializedName("jump_url")
        private String jumpUrl;
        /**
         * 若应用为小程序类型，该字段填小程序pagepath，若未设置，跳到小程序主页
         */
        @SerializedName("pagepath")
        private String pagePath;
    }

    @Data
    @ToString
    @EqualsAndHashCode
    public static class List {
        /**
         * 关键数据列表个，不超过3个
         */
        @SerializedName("items")
        private java.util.List<List.Item> items;

        @Data
        @ToString
        @EqualsAndHashCode
        public static class Item {
            /**
             * 列表显示文字，不超过128个字节
             */
            @SerializedName("title")
            private String title;
            /**
             * 点击跳转url，若不填且应用设置了主页url，则跳转到主页url，否则跳到应用会话窗口
             */
            @SerializedName("jump_url")
            private String jumpUrl;
            /**
             * 若应用为小程序类型，该字段填小程序pagepath，若未设置，跳到小程序主页
             */
            @SerializedName("pagepath")
            private String pagePath;
        }
    }

    @Data
    @ToString
    @EqualsAndHashCode
    public static class Webview {
        /**
         * 图片url。图片的最佳比例为3.35:1
         */
        @SerializedName("url")
        private String url;
        /**
         * 点击跳转url，若不填且应用设置了主页url，则跳转到主页url，否则跳到应用会话窗口
         */
        @SerializedName("jump_url")
        private String jumpUrl;
        /**
         * 若应用为小程序类型，该字段填小程序pagepath，若未设置，跳到小程序主页
         */
        @SerializedName("pagepath")
        private String pagePath;
    }
}
